/**
 * 士兵队列训练
 * 某部队进行新兵队列训练，将新兵从一开始按顺序依次编号，并排成一行横队，训练的规则如下：从头开始一至二报数，凡报到二的出列，剩下的向小序号方向靠拢，再从头开始进行一至三报数，凡报到三的出列，剩下的向小序号方向靠拢，继续从头开始进行一至二报数。。。，以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
 */

#include <iostream>
#include <queue>

using namespace std;

int main()
{
    int t;
    while (cin >> t)
    {
        while (t--)
        {
            int N;
            cin >> N;
            queue<int> q1, q2;
            for (int i = 1; i <= N; ++i)
            {
                q1.push(i);
            }
            while (q1.size() > 3)
            {
                int nCnt = 0;
                while (q1.size())
                {
                    int v = q1.front();
                    ++nCnt;
                    // 数到2的出列，证明数到1的需要保留
                    if (nCnt % 2 == 1)
                    {
                        q2.push(v);
                    }
                    q1.pop();
                }
                if (q2.size() <= 3)
                {
                    while (q2.size())
                    {
                        q1.push(q2.front());
                        q2.pop();
                    }
                    break;
                }
                nCnt = 0;
                while (q2.size())
                {
                    int v = q2.front();
                    ++nCnt;
                    // 数到3的出列，证明数到1和2的需要保留
                    if (nCnt % 3 == 1 || nCnt % 3 == 2)
                    {
                        q1.push(v);
                    }
                    q2.pop();
                }
            }
            while (q1.size())
            {
                int v = q1.front();
                cout << v << " ";
                q1.pop();
            }
            cout << endl;
        }
    }
}